package solitariocontinental;

import java.util.ArrayList;
import java.util.List;

import aima.search.framework.Successor;
import aima.search.framework.SuccessorFunction;

public class SolitarioContinentalSuccessorFunction implements SuccessorFunction{

	@SuppressWarnings("unchecked")
	@Override
	public List getSuccessors(Object state) {
		
		// Creamos la lista donde almacenar los estados sucesores
		List<Successor> successors = new ArrayList<Successor>();
		
		SolitarioContinentalEstado estadoActual = (SolitarioContinentalEstado) state;
		
		SolitarioContinentalEstado nuevoEstado = null;
		
		// Para cada casilla del tablero...
		for (int i=0; i < SolitarioContinentalEstado.LADO; i++)
			for (int j=0; j < SolitarioContinentalEstado.LADO; j++){
				// ...para cada movimiento posible desde dicha casilla...
				for (int sentido=0; sentido < SolitarioContinentalEstado.getNumMovimientos(); sentido++)
					if (estadoActual.esPosibleMover(i, j, sentido)){
						// ...se crea un estado nuevo (copia del actual)...
						nuevoEstado = new SolitarioContinentalEstado(estadoActual);
						// ...se realiza el movimiento...
						nuevoEstado.moverFicha(i, j, sentido);
						// ...y se almacena en la lista de sucesores
						successors.add(new Successor("Ficha: " + i + ", " + j + "; Sentido: " + sentido, nuevoEstado));
					}
			}

		
		return successors;
	}

}
